---
sidebar_position: 1
---

# Вводная часть

:::info

Основано на статье ["Руководство по CI/CD в GitLab для (почти) абсолютного новичка"](https://habr.com/ru/post/498436/).

:::

В статье [GitLab CI/CD](../../../../lectures/gitcicd/ci-cd/gitlab-ci-cd.md) данного руководства мы уже обсуждали GitLab CI. Давайте применим полученные знания для реализации собственного конвейера в нашем проекте.

Кратко опишем процесс, который обычно реализуется конвейер в GitLab CI:

- разработчик отправляет коммит в репозиторий, создаёт merge request через сайт, или ещё каким-либо образом явно или неявно запускает конвейер;
- из конфигурации выбираются все задачи, условия которых позволяют их запустить в данном контексте;
- задачи организуются в соответствии со своими этапами;
- этапы по очереди выполняются - т.е. параллельно выполняются все задачи этого этапа:
  - если этап завершается неудачей (т.е. завершается неудачей хотя бы одна из задач этапа) - конвейер останавливается (почти всегда);
  - если все этапы завершены успешно, конвейер считается успешно прошедшим.

Таким образом, имеем:

- **конвейер** (pipeline) - набор задач, организованных в этапы, в котором можно собрать, протестировать, упаковать код, развернуть готовую сборку в облачный сервис, и пр.;
- **этап** (stage) - единица организации конвейера, содержит 1+ задачу;
- **задача** (job) — единица работы в конвейера. Состоит из скрипта (обязательно), условий запуска, настроек публикации/кеширования артефактов и много другого.

Соответственно, задача при настройке CI/CD сводится к тому, чтобы создать набор задач, реализующих все необходимые действия для сборки, тестирования и публикации кода и артефактов.

## Исходная позиция

Имеем:

- репозиторий в GitLab.

Хотим:

- Автоматическую сборку и тестирование для каждого merge request;
- Помимо тестирования провести статический анализ кода;
- В случае прохождения всех тестов, разрешить слияние. В противном случае заблокировать слияние.
- В случае успешного мерджа в ветку по умолчанию, собрать бинарники программы и публиковать их в релизах.

Описанные требования органично ложатся на следующую модель конвейера:

- **Этап 1** — тестирование
  
  Проводим статический анализ кода и тестируем его.

- **Этап 2** - сборка бинарников
  
  В случае успешного мерджа в ветку соберем бинарники и опубликуем их в артефактах.

- **Этап 3** - подготовка релиза

  Подготавливаем красивый релиз с прикрепленными бинарниками.

:::info

Про этапы и задачи мы обсуждали в статье [GitLab CI/CD](../../../../lectures/gitcicd/ci-cd/gitlab-ci-cd.md) данного руководства.

:::
